// Flutter/Dart 中的各种循环用法示例
void main() {
  print('1. 标准 for 循环：');
  // 1.1 基本计数循环
  for (int i = 0; i < 3; i++) {
    print('计数: $i');
  }

  // 1.2 步进值不为1的循环
  print('\n步进值为2的循环：');
  for (int i = 0; i <= 6; i += 2) {
    print('值: $i');
  }

  // 1.3 倒计数循环
  print('\n倒计数循环：');
  for (int i = 3; i > 0; i--) {
    print('倒计时: $i');
  }

  print('\n2. for-in 循环：');
  // 2.1 遍历List
  List<String> fruits = ['苹果', '香蕉', '橙子'];
  for (String fruit in fruits) {
    print('水果: $fruit');
  }

  // 2.2 遍历Set
  print('\n遍历Set：');
  Set<int> numbers = {1, 2, 3};
  for (int number in numbers) {
    print('数字: $number');
  }

  // 2.3 遍历Map
  print('\n遍历Map：');
  Map<String, int> ages = {
    '张三': 20,
    '李四': 25,
    '王五': 30,
  };
  // 遍历键值对
  for (MapEntry entry in ages.entries) {
    print('${entry.key} 的年龄是 ${entry.value}');
  }
  // 只遍历键
  for (String name in ages.keys) {
    print('姓名: $name');
  }
  // 只遍历值
  for (int age in ages.values) {
    print('年龄: $age');
  }

  print('\n3. forEach 方法：');
  // 3.1 List的forEach
  fruits.forEach((fruit) {
    print('处理水果: $fruit');
  });

  // 3.2 带索引的forEach
  print('\n带索引的forEach：');
  fruits.asMap().forEach((index, fruit) {
    print('索引 $index: $fruit');
  });

  print('\n4. 高级用法：');
  // 4.1 循环控制 - break
  print('使用 break：');
  for (int i = 0; i < 5; i++) {
    if (i == 3) break;
    print('break示例: $i');
  }

  // 4.2 循环控制 - continue
  print('\n使用 continue：');
  for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    print('continue示例: $i');
  }

  // 4.3 嵌套循环
  print('\n嵌套循环：');
  for (int i = 1; i <= 2; i++) {
    for (int j = 1; j <= 2; j++) {
      print('i: $i, j: $j');
    }
  }

  // 4.4 带标签的break
  print('\n带标签的break：');
  outerLoop: for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      if (i == 1 && j == 1) break outerLoop;
      print('标签break示例 - i: $i, j: $j');
    }
  }

  print('\n5. 集合操作中的循环：');
  // 5.1 where筛选
  print('where筛选：');
  var evenNumbers = [1, 2, 3, 4, 5].where((n) => n.isEven);
  print('偶数: $evenNumbers');

  // 5.2 map转换
  print('\nmap转换：');
  var doubled = [1, 2, 3].map((n) => n * 2);
  print('加倍后: $doubled');

  // 5.3 展开运算符用于循环
  print('\n展开运算符：');
  var list1 = [1, 2];
  var list2 = [3, 4];
  var combined = [...list1, ...list2];
  print('合并后: $combined');

  // 5.4 集合生成式
  print('\n集合生成式：');
  var squares = [for (var i = 1; i <= 3; i++) i * i];
  print('平方数: $squares');
}
